Skip to content
created by Aha00aAha00a at 2026-05-26
last modified by Aha00aAha00a at 2026-06-25
revision: 3

ToDo ApiKey

API Key 기반 Bot API 구현은 완료했다.

상세 설계와 구현 결과는 ApiKey, 호출 명세는 BotApi를 기준 문서로 둔다.

1. 남은 작업

  • 1. Account Settings에서 API Key 발급 flow를 staging에서 확인한다.
    • API Key 생성
    • 생성 직후 plain text key 1회 표시와 복사
    • 목록에서 keyPrefix, label, 사용/폐기 상태 표시
    • 폐기 후 같은 key로 Bot API 호출 시 401 Unauthorized
  • 2. 자동화 도구에서 실제 API 호출 테스트를 수행한다.
    • GET /api/bot/page/*name으로 페이지 읽기
    • POST /api/bot/page/*name으로 페이지 저장
    • revision 충돌 시 409 Conflict
    • 권한 없는 페이지에서 403 Forbidden
  • 3. AhaWikiDoc sync에 필요한 Bot API를 보강한다.
    • 페이지 목록/메타 API: name, revision, dateTime, isMinorEdit, viaApi, content hash를 반환
    • 최근 변경 API: Bot API 인증으로 page prefix, timestamp, revision 기준 필터 지원
    • batch metadata API: 여러 page name의 revision, dateTime, hash를 한 번에 조회
    • 이름변경 API: local file rename을 원격 page rename으로 반영
    • 삭제 API: local file delete를 원격 page delete로 반영하되 revision 확인과 명시적 확인 절차를 둠
    • sync manifest 전략: 서버에 별도 state를 저장하지 않고 local manifest에 lastSyncedAt, page별 revision, dateTime, contentHash를 기록
    • 구현 위치: conf/routes, app/controllers/BotApi.scala, test/com/aha00a/controllers/BotApiSpec.scala, BotApi
  • 4. BotApiSpec를 실행한다.
    • sbt.bat "testOnly com.aha00a.controllers.BotApiSpec"에서 18개 테스트 통과.
  • 5. 검토 결과를 반영해 Bot API sync 안전성을 보강한다.
    • /api/bot/changesafterRevision이 전체 sync cursor로 오용되지 않도록 제한하고 문서화한다.
    • Bot 삭제 API가 웹 삭제와 같은 첨부파일 정리 정책을 갖도록 보강한다.
    • changessince, afterRevision, includeMinorEdit, invalid since 테스트를 보강한다.

2. 완료/기준 문서

  • 구현 설계와 완료 내역: ApiKey
  • Bot API 호출 명세: BotApi
  • Account Settings API Key UI의 light/dark theme 적용과 자동화 도구 placeholder 정리
  • Account Settings를 위키 문서형 레이아웃과 wikiTableSimple 테이블 스타일로 정리
  • Account Settings와 권한 없음 Login 버튼의 색상/글꼴 크기를 사이트 기본 톤에 맞춤
  • Bot 저장 시 websocket broadcast와 Telegram 알림은 보내지 않는다.
    • Bot 저장 API는 page 저장, cache invalidate, page calculation enqueue까지만 수행한다.
    • Telegram 알림은 minorEditviaApi 저장을 제외한다.

3. See Also

3.1. Similar Pages

Similar pages by cosine similarity. Words after page name are term frequency.

  • Same Wiki
    • 72.94% Dev Api api(29:86), key(9:35), via(2:25), page(8:17), wiki(2:16), revision(7:7), aha(1:12), account(4:9), api는(1:11), minor(3:8)
    • 70.03% Api api(29:76), page(8:29), key(9:22), revision(7:18), 페이지(3:19), via(2:20), minor(3:16), 저장(4:15), edit(2:16), name(1:13)
  • Sister Wikis
    • 31.02% Aha00a:PlantUML api(29:30), include(1:18), sync(3:3), content(2:1), aha(1:1), table(1:1), simple(1:1), 도구(1:1), invalidate(1:1)

3.2. Adjacent Pages

Control
≤ 32
all
1.0x
1.0x
80
-120
ON
Metrics
Nodes(visible/total)0/0
Links(visible/total)0/0
Avg degree0.00
Depth coverage0
Queue(fetch/graph)0 / 0
Zoom(scale)1.00x
Ctrl/⌘ + Scroll: Zoom
Root 1-hop 2-hop+